public class Solution {
    public static void main(String[] args) {

    }
    /*容易错的地方：考虑x和n为0，
    当b小于0不能直接递归然后取倒数，因为这样会栈溢出；
    思路一定要清晰；
    注意int取反，Java 代码中 int32 变量 n \in [-2147483648, 2147483647]n∈[−2147483648,2147483647] ，因此当 n = -2147483648n=−2147483648 时执行 n = -nn=−n 会因越界而赋值出错。解决方法是先将 nn 存入 long 变量 bb ，后面用 bb 操作即可。
    **/
    public double myPow(double x, int n) {
        if (x == 0.0) {
            return 0;
        }
        if (n == 0) {
            return 1;
        }
        long b = n;
        if (b < 0) {
            x = 1 / x;
            b = -b;
        }
        double res = 1.0;

        while (b != 0) {
            if ((b & 1) == 1) {res *= x;}
            x *= x;
            b >>>= 1;


        }
        return res;
    }
}
